/**
 *	@file	slot_sub.h
 *	@brief	スロット　サブ関数
 *	@author	Miyuki Iwasawa
 *	@date	08.11.21
 */

#ifndef __H_SLOT_SUB_H__
#define __H_SLOT_SUB_H__

typedef enum{
 COIN_NUM_CREDIT,
 COIN_NUM_PAYOUT,
 COIN_NUM_MODE_MAX,
}COIN_NUM_MODE;

typedef enum{
 BACK_BTN_ACTIVE,
 BACK_BTN_PASSIVE,
 BACK_BTN_ANIME,
}BACK_BTN_MODE;

typedef enum{
 FADE_IN,
 FADE_OUT,
}FADE_CODE;

typedef enum{
 DOOBURU_FRONT,
 DOOBURU_BACK,
 DOOBURU_F2B,
 DOOBURU_B2F,
 DOOBURU_DRAW,
 DOOBURU_GRAD,
 DOOBURU_BURU,
}DOOBURU_STATE;


extern u16 SlotSub_Rand1000(void);
extern u16 SlotSub_Rand(int div);

/**
 *	@brief	単純入力チェック
 */
extern BOOL SlotSub_InputCheck( SLOTMAIN* wk );

/**
 *	@brief	役がREGまたはビックか？
 */
extern BOOL SlotSub_IsBonusCode( int prize_code );

/**
 *	@brief	払い戻しコイン数取得
 */
extern int SlotSub_GetPayoutCoinNum( SLOTMAIN* wk, int code);

/**
 *	@brief	戻るボタン描画
 */
extern void SlotSub_BackBtnWrite(SLOTMAIN* wk,BACK_BTN_MODE mode);

/*
 *	@brief	ウィンドウメッセージ出力
 */
extern void SlotSub_WinMsgPut(SLOTMAIN* wk,MIDX_WIN idx);

/**
 *	@brief	ウィンドウメッセージクリア
 */
extern void SlotSub_WinMsgClear(SLOTMAIN* wk);

/**
 *	@brief	システムメッセージ出力
 */
extern void SlotSub_SysMsgPut(SLOTMAIN* wk,MIDX_SYS idx);

/**
 *	@brief	ドーブルアニメ切替
 */
extern void SlotSub_DooburuAnmSet( SLOTMAIN* wk, DOOBURU_STATE state );

/**
 *	@brief	下画面数値出力
 */
extern void SlotSub_CoinNumDraw(SLOTMAIN* wk,int num,COIN_NUM_MODE mode);

/**
 *	@brief	上画面ガイド　出力
 */
extern void SlotSub_GuideBaseDraw( SLOTMAIN* wk, GAME_STATE state);

/**
 *	@brief	上画面ガイド　パラメータ出力
 */
extern void SlotSub_GuideParamDraw( SLOTMAIN* wk, GAME_STATE state, BONUS_CODE bonus_code);

/**
 *	@brief	上画面ガイド描画切替エフェクトタスクセット
 *
 *	@param	tcb_ct	タスクの動作数を監視するカウンタへのポインタ(NULL指定可)
 *	@param	pri	タスクの動作プライオリティ
 *
 *	tcb_ctへのポインタは、渡しておくとタスク追加時に +1し、タスクを削除するときに -1します
 */
extern TCB_PTR AddTCB_GuideChange(SLOTMAIN* wk,GAME_STATE next_state,int* tcb_ct,u8 pri);

/**
 *	@brief	リール絵切替エフェクトタスクセット
 *
 *	@param	tcb_ct	タスクの動作数を監視するカウンタへのポインタ(NULL指定可)
 *	@param	pri	タスクの動作プライオリティ
 *
 *	tcb_ctへのポインタは、渡しておくとタスク追加時に +1し、タスクを削除するときに -1します
 */
extern TCB_PTR AddTCB_ReelChange(SLOTMAIN* wk,int* tcb_ct,u8 pri);

/**
 *	@brief	ベットライン点灯/消灯セット
 */
extern void SlotSub_BetLineLightSet( SLOTMAIN* wk, LINE_CODE line, LIGHT_STATE st);
extern void SlotSub_BetLineLightSetAll( SLOTMAIN* wk, LIGHT_STATE st);

/**
 *	@brief	リール停止ランプカラーセットAll
 */
extern void SlotSub_ReelLampSetAll( SLOTMAIN* wk, LIGHT_STATE st);

/**
 *	@brief	リール停止ランプカラーセット
 */
extern void SlotSub_ReelLampSet( SLOTMAIN* wk, REEL_NUM no,LIGHT_STATE st);

/**
 *	@brief	リール停止ランプ点滅エフェクト　ストップリクエスト
 */
extern void SlotSub_ReelLampAnimeStopReq( SLOTMAIN* wk, REEL_NUM no);

/**
 *	@brief	リール停止ランプアニメタスクセット
 */
extern TCB_PTR AddTCB_ReelLampAnimeSet(SLOTMAIN* wk,REEL_NUM no,int pri);

/**
 *	@brief	WinLoseアイコン表示エフェクト
 */
extern TCB_PTR AddTCB_HitLineEff(SLOTMAIN* wk,int line,int* tcb_ct,u8 pri);

/**
 *	@brief	ガイド点滅表示エフェクト
 */
extern TCB_PTR AddTCB_GuideBlinkEff(SLOTMAIN* wk,GAME_STATE game_st,u8 code ,int* tcb_ct,u8 pri);

/**
 *	@brief	コイン払い出し処理タスクセット
 *
 *	@param	credit	現在のコイン枚数
 *	@param	payout	払い出し金額
 *	@param	tcb_ct	タスクの動作数を監視するカウンタへのポインタ(NULL指定可)
 *	@param	pri	タスクの動作プライオリティ
 *
 *	tcb_ctへのポインタは、渡しておくとタスク追加時に +1し、タスクを削除するときに -1します
 *	監視に利用してください
 */
extern TCB_PTR AddTCB_Payout(SLOTMAIN* wk,int payout,int* tcb_ct,u8 pri);

/**
 *	@brief	上画面背景アニメ　削除
 */
extern void SlotSub_BguBackAnimeDel( SLOTMAIN* wk,BGU_BACK_CODE code);
/**
 *	@brief	上画面背景アニメ　セット
 */
extern void SlotSub_BguBackAnimeAdd( SLOTMAIN* wk, BGU_BACK_CODE code);

/*
 *	@brief	上画面背景チェンジエフェクト
 */
extern TCB_PTR AddTCB_BguBackChange(SLOTMAIN* wk,BGU_BACK_CODE code,int* tcb_ct);

/**
 *	@brief	上画面モードチェンジエフェクト
 */
extern TCB_PTR AddTCB_BguModeChange(SLOTMAIN* wk,BGU_BACK_CODE now_mode,BGU_BACK_CODE next_mode,int* tcb_ct);

/**
 *	@brief	ピクチャーBG書き込み
 */
extern void SlotSub_PictDraw( SLOTMAIN* wk, PICT_CODE pict, BOOL draft_f);

/**
 *	@brief	下書き描画エフェクトタスク
 */
extern TCB_PTR AddTCB_DraftDraw(SLOTMAIN* wk,PICT_CODE pict,int* tcb_ct,u8 pri);

extern TCB_PTR AddTCB_PictDraw(SLOTMAIN* wk,PICT_CODE pict,int* tcb_ct,u8 pri);

/**
 *	@brief	ピクチャー消去タスク
 */
extern TCB_PTR AddTCB_PictOff(SLOTMAIN* wk,int* tcb_ct,u8 pri);

////////////////////////////////////////////////////////////////////////
/**
 *	@brief	アイコンエフェクト全削除
 */
////////////////////////////////////////////////////////////////////////
extern void SlotSub_IconEffVanishAll( SLOTMAIN* wk );

/**
 *	@brief	ビックリマークアイコン表示エフェクト
 */
extern TCB_PTR AddTCB_ExIconEff(SLOTMAIN* wk,int mode,int* tcb_ct,u8 pri);

/**
 *	@brief	WinLoseアイコン登録
 */
extern void SlotSub_WinLoseIconSet( SLOTMAIN* wk, int num, int mode );

/**
 *	@brief	Emotionアイコン登録
 */
extern void SlotSub_EmotionIconSet( SLOTMAIN* wk );

#ifdef PM_DEBUG
extern void Debug_WinVisibleCheck(SLOTMAIN* wk);
extern void Debug_WinUpdate(SLOTMAIN* wk);
extern void Debug_LotterySet(SLOTMAIN* wk);
extern void Debug_WinResultSet(SLOTMAIN* wk);

#endif	//PM_DEBUG

#endif	//__H_SLOT_SUB_H__
